﻿using System;
using System.ComponentModel;

namespace Marmat.Forms
{
    public partial class DataGrid
    {

        /// <summary>
        /// 把编辑器指派到个别单元格。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("编辑器")]
        [Description("把编辑器指派到个别单元格。")]
        public new event EventHandler<Views.DataGrid.CustomRowCellEditEventArgs> CustomRowCellEdit;

        /// <summary>
        /// 允许你指定一个自定义编辑器为就地编辑一个列,用于覆盖默认列编辑器,这是默认情况下用于显示和编辑模式。这个事件还允许您在编辑表单中更改编辑器。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("编辑器")]
        [Description("允许你指定一个自定义编辑器为就地编辑一个列,用于覆盖默认列编辑器,这是默认情况下用于显示和编辑模式。这个事件还允许您在编辑表单中更改编辑器。")]
        public new event EventHandler<Views.DataGrid.CustomRowCellEditEventArgs> CustomRowCellEditForEditing;

        /// <summary>
        /// 单元格编辑器正要被显示时发生，可用来阻止内置编辑器被激活。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("编辑器")]
        [Description("单元格编辑器正要被显示时发生，可用来阻止内置编辑器被激活。")]
        public new event EventHandler<Views.DataGrid.RowColCancelEventArgs> ShowingEditor;

        /// <summary>
        /// 显示编辑器时触发。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("编辑器")]
        [Description("显示编辑器时触发。")]
        public new event EventHandler<Views.DataGrid.RowColEventArgs> ShownEditor;

        /// <summary>
        /// 离开单元格编辑器时发生，可用来检查内容的合法性。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("编辑器")]
        [Description("离开单元格编辑器时发生，可用来检查内容的合法性。")]
        public new event EventHandler<Views.DataGrid.ValidateEditEventArgs> ValidatingEditor;
        /// <summary>
        /// 提供自定义单元合并行为的能力。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("合并")]
        [Description("提供自定义单元合并行为的能力。")]
        public new event EventHandler<Views.DataGrid.CellMergeEventArgs> CellMerge;

        /// <summary>
        /// 提供使用自定义规则对数据进行分组的功能。
        /// </summary>
        [Browsable(true)]
        [Category("排序")]
        [Description("提供使用自定义规则对数据进行分组的功能。")]
        public new event EventHandler<Views.DataGrid.CustomColumnSortEventArgs> CustomColumnGroup;

        /// <summary>
        /// 允许您实现自定义规则，根据这些规则对网格列进行排序
        /// 其数据。一个列只有在它的DevExpress.XtraGrid.Columns.GridColumn.SortMode时才使用这些自定义规则
        /// 属性设置为DevExpress.XtraGrid.ColumnSortMode.Custom。
        /// </summary>
        [Browsable(true)]
        [Category("排序")]
        [Description("允许您实现自定义规则，根据这些规则对网格列进行排序其数据。")]
        public new event EventHandler<Views.DataGrid.CustomColumnSortEventArgs> CustomColumnSort;

        /// <summary>
        /// 某一列的内容被更改后执行，此时列的内容已经是更改后的值。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("属性变更")]
        [Description("某一列的内容被更改后执行，此时列的内容已经是更改后的值。")]
        public new event EventHandler<Views.DataGrid.CellValueChangingEventArgs> CellValueChanged;

        /// <summary>
        /// 单元格的值变化时发生。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("属性变更")]
        [Description("单元格的值变化时发生。")]
        public new event EventHandler<Views.DataGrid.CellValueChangingEventArgs> CellValueChanging;

        /// <summary>
        /// 列宽度变化之后发生。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("属性变更")]
        [Description("列宽度变化之后发生。")]
        public new event EventHandler<Views.DataGrid.ColumnEventArgs> ColumnWidthChanged;

        /// <summary>
        /// 焦点列变化之后发生。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("属性变更")]
        [Description("焦点列变化之后发生。")]
        public new event EventHandler<Views.DataGrid.FocusedColumnChangedEventArgs> FocusedColumnChanged;

        /// <summary>
        /// 焦点行变化之后发生。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("属性变更")]
        [Description("焦点行变化之后发生。")]
        public new event EventHandler<Views.DataGrid.FocusedRowChangedEventArgs> FocusedRowChanged;

        /// <summary>
        /// 当行/单元格选择在多个选择模式下发生改变时。
        /// </summary>
        /// <remarks></remarks>
        [Browsable(true)]
        [Category("属性变更")]
        [Description("当行/单元格选择在多个选择模式下发生改变时。")]
        public new event EventHandler<Views.DataGrid.SelectionChangedEventArgs> SelectionChanged;

        [Browsable(true)]
        [Category("数据")]
        public new event EventHandler<Views.DataGrid.CustomColumnDisplayTextEventArgs> CustomColumnDisplayText;
        /// <summary>
        /// 在计算行高度的时候执行。
        /// </summary>
        [Browsable(true)]
        [Category("外观")]
        [Description("在计算行高度的时候执行。")]
        public new event EventHandler<Views.DataGrid.RowHeightEventArgs> CalcRowHeight;

        /// <summary>
        /// 在显示此单元格之前，为每个网格单元格触发。允许您修改外观。
        /// </summary>
        [Browsable(true)]
        [Category("外观")]
        [Description("在显示此单元格之前，为每个网格单元格触发。允许您修改外观。")]
        public new event EventHandler<Views.DataGrid.RowCellStyleEventArgs> RowCellStyle;
        [Browsable(true)]
        [Category("外观")]
        public new event EventHandler<Views.DataGrid.RowStyleEventArgs> RowStyle;

        [Browsable(true)]
        [Category("自定义绘图")]
        public new event EventHandler<Views.DataGrid.RowCellCustomDrawEventArgs> CustomDrawCell;
        [Browsable(true)]
        [Category("自定义绘图")]
        public new event EventHandler<Views.DataGrid.ColumnHeaderCustomDrawEventArgs> CustomDrawColumnHeader;

        [Browsable(true)]
        [Category("作用")]
        public new event EventHandler<Views.DataGrid.RowAllowEventArgs> BeforeLeaveRow;
        [Browsable(true)]
        [Category("作用")]
        public new event EventHandler<Views.DataGrid.InvalidRowExceptionEventArgs> InvalidRowException;
        [Browsable(true)]
        [Category("作用")]
        public new event EventHandler<Views.DataGrid.InvalidValueExceptionEventArgs> InvalidValueException;
        [Browsable(true)]
        [Category("作用")]
        public new event EventHandler<Views.DataGrid.RowColEventArgs> RowCellClick;
        [Browsable(true)]
        [Category("作用")]
        public new event EventHandler<Views.DataGrid.RowClickEventArgs> RowClick;
        [Browsable(true)]
        [Category("作用")]
        public new event EventHandler<Views.DataGrid.ValidateRowEventArgs> ValidateRow;

        // ''' <summary>
        // ''' 在重新加载数据后执行
        // ''' </summary>
        // ''' <param name="e"></param>
        // ''' <remarks></remarks>
        // <Category("数据·加载"), Description("在重新加载数据后执行。")>
        // Public Event AfterLoad As EventHandler(Of Marmat.Forms.Views.DataGrid.GridEventArgs)

        /// <summary>
        /// 某一列的内容被更改后执行，此时列的内容已经是更改后的值。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·变更")]
        [Description("某一列的内容发生变化前执行，此时新值还没有写入表中，列的内容还是更改前的值。利用此事件，我们可以在某列内容发生变化之前进行拦截判断，如果不符合特定的条件，则取消此次变化，或者重新指定一个值。")]
        public event EventHandler<Views.DataGrid.DataColumnChangeEventArgs> DataColChanging;

        /// <summary>
        /// 某一列的内容被更改后执行，此时列的内容已经是更改后的值。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·变更")]
        [Description("某一列的内容被更改后执行，此时列的内容已经是更改后的值。")]
        public event EventHandler<Views.DataGrid.DataColumnChangeEventArgs> DataColChanged;

        // ''' <summary>
        // ''' 在保存数据之前执行，可以在此对数据进行最终的验证。
        // ''' </summary>
        // ''' <param name="sender"></param>
        // ''' <param name="e"></param>
        // ''' <remarks></remarks>
        // <Category("数据·变更"), Description("在保存数据之前执行，可以在此对数据进行最终的验证。")>
        // Public Event BeforeSaveData As EventHandler(Of Marmat.Forms.Views.DataGrid.BeforeSaveDataEventArgs)

        /// <summary>
        /// 增加一行之前执行。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·增加行")]
        [Description("增加一行之前执行。")]
        public event EventHandler<Views.DataGrid.DataGridCancelEventArgs> BeforeAddDataRow;

        /// <summary>
        /// 增加一行时执行，此时新增行(DataRow)已经创建，但并未真正增加到DataTable中，通常在此处对新增行进行默认值的设置。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·增加行")]
        [Description("增加一行时执行，此时新增行(DataRow)已经创建，但并未真正增加到DataTable中，通常在此处对新增行进行默认值的设置。")]
        public event EventHandler<Views.DataGrid.DataRowEventArgs> DataRowAdding;

        /// <summary>
        /// 增加一行后执行，此时新增行(DataRow)已经真正增加到DataTable中。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·增加行")]
        [Description("增加一行后执行，此时新增行(DataRow)已经真正增加到DataTable中。")]
        public event EventHandler<Views.DataGrid.DataRowEventArgs> DataRowAdded;

        /// <summary>
        /// 删除一行之前执行，可以在此处进行权限或逻辑验证，如果通不过验证，则撤销此次删除行操作。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·删除行")]
        [Description("删除一行之前执行，可以在此处进行权限或逻辑验证，如果通不过验证，则撤销此次删除行操作。")]
        public event EventHandler<Views.DataGrid.DataRowCancelEventArgs> BeforeDeleteDataRow;

        /// <summary>
        /// 正在删除一行的时候执行，这时行还未被删除。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·删除行")]
        [Description("正在删除一行的时候执行，这时行还未被删除。")]
        public event EventHandler<Views.DataGrid.DataRowEventArgs> DataRowDeleting;

        /// <summary>
        /// 删除行后执行，此时行已经被删除。
        /// </summary>
        /// <remarks></remarks>
        [Category("数据·删除行")]
        [Description("删除行后执行，此时行已经被删除。")]
        public event EventHandler<Views.DataGrid.DataRowEventArgs> DataRowDeleted;

        /// <summary>
        /// 选择不同数据行后执行，也就是CurrentRow属性发生变化后执行。
        /// </summary>
        /// <remarks></remarks>
        [Category("选择")]
        [Description("选择不同数据行后执行，也就是CurrentRow属性发生变化后执行。")]
        public new event EventHandler<Views.DataGrid.GridEventArgs> CurrentChanged;

        /// <summary>
        /// 选择不同位置的数据行后执行，也就是Position属性发生变化后执行。
        /// </summary>
        [Category("选择")]
        [Description("选择不同位置的数据行后执行，也就是Position属性发生变化后执行。")]
        public new event EventHandler<Views.DataGrid.GridEventArgs> PositionChanged;

        /// <summary>
        /// 移动行后执行。
        /// </summary>
        /// <remarks></remarks>
        [Category("调整")]
        [Description("移动行后执行。")]
        public event EventHandler<Views.DataGrid.AfterMoveRowEventArgs> AfterMoveRow;

        /// <summary>
        /// 排序数据后执行，也就是Table的Sort属性发生后执行。
        /// </summary>
        /// <remarks></remarks>
        [Category("杂项")]
        [Description("排序数据后执行，也就是表格的Sort属性发生后执行。")]
        private event EventHandler<Views.DataGrid.GridEventArgs> AfterSort;

        /// <summary>
        /// 点击操作列的时候执行。
        /// </summary>
        [Category("点击")]
        [Description("点击操作列的时候执行。")]
        public new event EventHandler<Views.DataGrid.RowColEventArgs> CellLinkClick;

        /// <summary>
        /// 单击单元格按钮后执行，通常用于实现一些复杂的输入功能。
        /// </summary>
        [Category("点击")]
        [Description("单击单元格按钮后执行，通常用于实现一些复杂的输入功能。")]
        public new event EventHandler<Views.DataGrid.RowColEventArgs> CellButtonClick;

        /// <summary>
        /// 双击行后执行
        /// </summary>
        /// <param name="e"></param>
        /// <remarks></remarks>
        [Category("作用")]
        [Description("双击单元格后执行。")]
        public new event EventHandler<Views.DataGrid.RowColEventArgs> RowCellDoubleClick;
    }
}